﻿package net.wangit;

import java.util.HashMap;
import java.util.Map;

import net.wangit.framework.config.AVariables;
import net.wangit.jdbc.DB;
import net.wangit.jdbc.DBFactory;
import net.wangit.util.Checker;


/**
 * 变量读取工具类
 * 
 * @author watson Feb 24, 2010
 */
public class Variables {

	private static final String SQL = "select vid,vvalue from AVARIABLES";
	private static Map<String, String> variables;

	// 取得变量值。
	public static final String get(String id) {
		if (variables == null)
			load();
		return variables.get(id);
	}

	// 取得变量值，值不存在时返回默认值。
	public static final String get(String id, String defaultValue) {
		String value = get(id);
		return value != null ? value : defaultValue;
	}

	// 取得变量值，并且转换为double类型，值不存在或为空时返回默认值。
	public static final double getDouble(String id, double defaultValue) {
		String value = get(id);
		return Checker.isEmpty(value) ? defaultValue : Double
				.parseDouble(value);
	}

	// 取得变量值，并且转换为int类型，值不存在或为空时返回默认值。
	public static final int getInt(String id, int defaultValue) {
		String value = get(id);
		return Checker.isEmpty(value) ? defaultValue : Integer.parseInt(value);
	}

	private static synchronized void load() {
		variables = new HashMap<String, String>();
		try {
			DB db = DBFactory.getDB();
			MapList list = db.query(Variables.SQL);
			for (int i = 0; i < list.size(); i++) {
				Row row = list.getRow(i);
				variables
						.put(row.get(AVariables.ID), row.get(AVariables.VALUE));
			}

		} catch (Exception exception) {
		}
	}

	// 重新读取变量。
	public static void reload() {
		variables = null;
	}

	private Variables() {
	}
}
